import axios from 'axios'
import { Message } from 'element-ui'

// 创建axios实例
const wvpService = axios.create({
  baseURL: 'http://47.120.9.38:18080', // WVP-GB28181-Pro平台API基础URL
  timeout: 30000 // 请求超时时间
})

// WVP-GB28181-Pro平台token存储
let wvpToken = ''

/**
 * 设置WVP-GB28181-Pro平台token
 * @param {String} token - WVP-GB28181-Pro平台token
 */
export function setWvpToken(token) {
  wvpToken = token
  localStorage.setItem('wvp_token', token)
}

/**
 * 获取WVP-GB28181-Pro平台token
 * @returns {String} WVP-GB28181-Pro平台token
 */
export function getWvpToken() {
  if (!wvpToken) {
    wvpToken = localStorage.getItem('wvp_token') || ''
  }
  return wvpToken
}

/**
 * 清除WVP-GB28181-Pro平台token
 */
export function clearWvpToken() {
  wvpToken = ''
  localStorage.removeItem('wvp_token')
}

// 请求拦截器
wvpService.interceptors.request.use(
  config => {
    // 如果有token，则添加到请求头
    const token = getWvpToken()
    if (token) {
      config.headers['access-token'] = token
    }
    return config
  },
  error => {
    console.error('WVP请求错误:', error)
    return Promise.reject(error)
  }
)

// 响应拦截器
wvpService.interceptors.response.use(
  response => {
    const res = response.data
    // 如果返回的状态码不是0，则判断为错误
    if (res.code !== 0) {
      Message({
        message: res.msg || 'WVP-GB28181-Pro请求错误',
        type: 'error',
        duration: 5 * 1000
      })
      return Promise.reject(new Error(res.msg || 'WVP-GB28181-Pro请求错误'))
    } else {
      return res
    }
  },
  error => {
    console.error('WVP响应错误:', error)
    Message({
      message: error.message || 'WVP-GB28181-Pro请求失败',
      type: 'error',
      duration: 5 * 1000
    })
    return Promise.reject(error)
  }
)

/**
 * WVP-GB28181-Pro平台登录
 * @param {String} username - 用户名
 * @param {String} password - 密码（MD5加密后的）
 * @returns {Promise} 登录结果
 */
export function wvpLogin(username, password) {
  return wvpService({
    url: '/api/user/login',
    method: 'get',
    params: { username, password }
  }).then(res => {
    if (res.data && res.data.accessToken) {
      setWvpToken(res.data.accessToken)
    }
    return res
  })
}

/**
 * 开始视频点播
 * @param {String} deviceId - 设备国标编号
 * @param {String} channelId - 通道国标编号
 * @param {Object} options - 可选参数
 * @returns {Promise} 点播结果
 */
export function startPlay(deviceId, channelId, options = {}) {
  console.log(`========== WVP视频点播请求开始 ==========`);
  
  // 参数验证
  if (!deviceId) {
    console.error('【严重错误】设备ID为空，无法发起播放请求');
    return Promise.reject(new Error('设备ID不能为空'));
  }
  
  if (!channelId) {
    console.error('【严重错误】通道ID为空，无法发起播放请求');
    return Promise.reject(new Error('通道ID不能为空'));
  }
  
  console.log(`设备ID类型: ${typeof deviceId}, 值: ${deviceId}`);
  console.log(`通道ID类型: ${typeof channelId}, 值: ${channelId}`);
  console.log(`传输协议: ${options.transport || 'TCP-ACTIVE'}`);
  console.log(`请求URL: /api/play/start/${deviceId}/${channelId}`);
  
  return wvpService({
    url: `/api/play/start/${deviceId}/${channelId}`,
    method: 'get',
    params: {
      transport: options.transport || 'TCP-ACTIVE',
      ...options
    }
  }).then(res => {
    console.log(`WVP视频点播响应成功:`, res);
    return res;
  }).catch(error => {
    console.error(`WVP视频点播请求失败:`, error);
    console.error(`错误详情: ${error.message}`);
    if (error.response) {
      console.error('错误状态码:', error.response.status);
      console.error('错误响应数据:', error.response.data);
    }
    return Promise.reject(error);
  });
}

/**
 * 停止视频点播
 * @param {String} deviceId - 设备国标编号
 * @param {String} channelId - 通道国标编号
 * @param {Object} options - 可选参数
 * @returns {Promise} 停止点播结果
 */
export function stopPlay(deviceId, channelId, options = {}) {
  return wvpService({
    url: `/api/play/stop/${deviceId}/${channelId}`,
    method: 'get',
    params: options
  })
}

/**
 * 查询正在播放的视频
 * @returns {Promise} 视频列表
 */
export function listPlayingVideos() {
  return wvpService({
    url: '/api/play/list',
    method: 'get'
  })
}

/**
 * 视频流保活
 * @param {String} stream - 流ID
 * @param {Object} options - 可选参数
 * @returns {Promise} 保活结果
 */
export function keepaliveStream(stream, options = {}) {
  return wvpService({
    url: '/api/play/keepalive',
    method: 'get',
    params: {
      stream,
      ...options
    }
  })
}

/**
 * 云台控制
 * @param {String} deviceId - 设备国标编号
 * @param {String} channelId - 通道国标编号
 * @param {String} command - 控制命令，可选值：left/right/up/down/upleft/upright/downleft/downright/zoomin/zoomout/stop
 * @param {Number} horizonSpeed - 水平速度(1-255)，默认50
 * @param {Number} verticalSpeed - 垂直速度(1-255)，默认50
 * @param {Number} zoomSpeed - 变焦速度(0-255)，默认0
 * @returns {Promise} 控制结果
 */
export function ptzControl(deviceId, channelId, command, horizonSpeed = 50, verticalSpeed = 50, zoomSpeed = 0) {
  return wvpService({
    url: `/api/front-end/ptz/${deviceId}/${channelId}`,
    method: 'get',
    params: {
      command,
      horizonSpeed,
      verticalSpeed,
      zoomSpeed
    }
  })
}

export default wvpService 